package stream;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.comparator.PropertyComparator;

import java.util.List;
import java.util.PriorityQueue;
import java.util.stream.Collector;

public class PriorityCollectorTest {
    public static void main(String[] args) {
        List<Student> studentList = CollUtil.toList(
                new Student().setId(1).setAge(18),
                new Student().setId(2).setAge(9),
                new Student().setId(3).setAge(20)
        );

        PriorityQueue<Student> collect = studentList.stream().collect(Collector.of(
                // 定义优先级容器 并设置比较器 按照age字段进行排序
                () -> new PriorityQueue(new PropertyComparator("age")),
                // 设置容器和轮询元素如何操作 元素正常offer进容器排序 从小到大 然后只要超过2个 就删除头一个最小的
                (queue, element) -> {
                    queue.offer(element);

                    if (queue.size() > 2) {
                        queue.poll();
                    }
                },
                // 设置并行流情况下 多个线程对应的多个容器之间如何归集 为了收集器健壮性设置的 即使不用并行流
                (queue1, queue2) -> {
                    queue1.addAll(queue2);
                    return queue1;
                }
        ));

        for (Student student : collect) {
            System.out.println(student);
        }
    }
}
